#ifndef CALIBRATIONDATASET_H_
#define CALIBRATIONDATASET_H_

//---------------------------------------------------------------------
// Includes
//---------------------------------------------------------------------
#include <opencv/cv.h>
#include <opencv/cvaux.h>
#include "../Vision/Camera.hpp"
#include "../Tools/Exceptions.hpp"
#include <string>
#include <vector>

namespace Calibration
{
	//-----------------------------------------------------------------
	// Classe décrivant le jeu d'image nécessaire pour effectuer le 
	// calibrage
	//-----------------------------------------------------------------
	class CalibrationDataset
	{
	public:
	
		//-------------------------------------------------------------
		// Constructeur
		//-------------------------------------------------------------
		CalibrationDataset();
		
		//-------------------------------------------------------------
		// Destructeur
		//-------------------------------------------------------------
		virtual ~CalibrationDataset();
		
		//-------------------------------------------------------------
		// Chargement d'une image depuis un fichier
		//-------------------------------------------------------------
		void AddImageFromFile( std::string filename ) throw (Tools::LoadingFailed,Tools::InvalidImageSize);
		
		//-------------------------------------------------------------
		// Chargement d'une image depuis la camera
		//-------------------------------------------------------------
		void AddImageFromCamera( Vision::Camera * camera ) throw (Tools::InvalidDevice,Tools::InvalidImageSize);
		
		//-------------------------------------------------------------
		// Accesseurs
		//-------------------------------------------------------------
		int GetNumberOfImages();
		int GetHeightOfImages();
		int GetWidthOfImages();
		IplImage* operator[]( unsigned int index );
				
		
	private:
		
		//-------------------------------------------------------------
		// Vérifie la validité de la taille de l'image
		//-------------------------------------------------------------
		bool CorrectImageSize( IplImage * image );
		
		//-------------------------------------------------------------
		// Définition de types
		//-------------------------------------------------------------
		 typedef std::vector<IplImage*> ImagesVector;
		 
		//-------------------------------------------------------------
		// Attributs
		//-------------------------------------------------------------
		
		// Collection d'image pour effectuer le calibrage 
		ImagesVector imagesVector;
		
		// Taille des images
		int imagesHeight;
		int imagesWidth;		
	};

}

#endif /*CALIBRATIONDATASET_H_*/
